package com.spider.spiderorderadmin.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spider.spiderorderadmin.entity.dto.UserDTO;
import com.spider.spiderorderadmin.entity.dto.UserPasswordDTO;
import com.spider.spiderorderadmin.entity.dto.UserRoleDTO;
import com.spider.spiderorderadmin.entity.model.User;
import com.spider.spiderorderadmin.entity.param.UserQueryParam;


/**
 * @author xiong.bo
 * @version 1.0
 * @date 2020/11/18 17:09
 */
public interface UserService extends IService<User> {


    /**
     * 用户列表
     *
     * @param userQueryParam
     * @return
     */
    Page<User> selectPage(UserQueryParam userQueryParam);

    //根据用户名查找用户实体
    User findByUsername(String username);

    /**
     * 新增用户
     *
     * @param user 用户信息
     * @param userId 当前用户ID
     * @return
     */
    User saveUser(UserDTO user, Long userId);

    /**
     * 更新用户
     *
     * @param user 用户信息
     * @param userId 当前用户ID
     * @return
     */
    User updateUser(UserDTO user, Long userId);

    /**
     * 用户修改密码
     *
     * @param userPasswordDto
     * @return
     */
    User updatePassword(UserPasswordDTO userPasswordDto);

    /**
     * 删除用户
     *
     * @param ids 多个主键id拼接
     * @return
     */
    Boolean deleteUser(String ids);

    User findById(Long id);

    UserDTO findUserDtoById(Long id);

    /**
     * 用户绑定角色
     *
     * @param roleIds
     * @return
     */
    Boolean bindingRole(UserRoleDTO roleIds);

    /**
     * 用户解除角色
     *
     * @param roleIds
     * @return
     */
    Boolean relieveRole(UserRoleDTO roleIds);

    /**
     * 启用/禁用用户
     * 禁用用户无法登录和操作
     *
     * @param id
     * @param status
     * @param userContentId
     * @return
     */
    User enableUser(Long id, Integer status, Long userContentId);

    /**
     * 管理员给用户重置密码
     * @param userPasswordDto
     * @param userContentId
     * @return
     */
    User resetAccountPassword(UserPasswordDTO userPasswordDto, Long userContentId);
}
